home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_TUROK.ZIP / Turok.txt < prev   
Encoding:
Text File  |  1998-03-15  |  10.2 KB  |  214 lines

  1.  
  2. Free Information Xchange '97 presents:
  3.  
  4. TUROK: Dinosaur Hunter - CD Crack by Static Vengeance
  5.  
  6. Requirements:
  7. Hex Editor and Full Install
  8.  
  9.     Alright, here's a decent game to play, except for that darn CD check before the game.
  10. The game is a first person 3D shooter (a'la Doom) by Aklaim that requires a 3D accelerator
  11. card.  Having a Monster 3D card makes playing this game a ton of fun!  Plenty of things to
  12. kill and you see some blood here and there.  A few nice death spasms thrown in and you have
  13. yourslef a nice game to play.  But before we can play Turok, we need to "play" a little game
  14. with CD check routine.  Using my favorite tool to crack Win95 programs, W32Dasm by RUSoft, I
  15. was able to find the CD check routine and figure a way around it.  So my reward for my efforts
  16. was a cracked version of Turok on my hard drive.  Running W32Dasm, disassemble Turok.exe and
  17. when W32Dasm is finished we use that same old trick to find the references to the CD check
  18. dialog.  Go up to the title bar and select "Refs" from the menu and drop down to "String
  19. data references" from there grab the slider bar and scroll down to the string "Turok requires
  20. a CDROM Drive to run!" and double click on it.  That will put you in the middle of the
  21. routine listed below.  I looked at the code at 4113C3 and saw a single call to the routine,
  22. but it pushes values on the stack.  So that leaves us to patch the check routine itself
  23. instead of killing the call to it.  So follow along:
  24.  
  25. * Referenced by a CALL at Address:
  26. |:004113C3   
  27. |
  28. :00404560 81EC08010000            sub esp, 00000108
  29. :00404566 53                      push ebx
  30. :00404567 55                      push ebp
  31. :00404568 56                      push esi
  32. :00404569 57                      push edi
  33. :0040456A 8D442418                lea eax, dword ptr [esp+18]
  34. :0040456E 33FF                    xor edi, edi
  35. :00404570 6800010000              push 00000100
  36. :00404575 50                      push eax
  37. :00404576 897C2418                mov dword ptr [esp+18], edi
  38. :0040457A 33ED                    xor ebp, ebp
  39. :0040457C E87FFEFFFF              call 00404400                        <-- Checks for a CD drive on system
  40. :00404581 8B9C2424010000          mov ebx, dword ptr [esp+00000124]
  41. :00404588 83C408                  add esp, 00000008
  42. :0040458B 3BC7                    cmp eax, edi
  43. :0040458D 89442414                mov dword ptr [esp+14], eax
  44. :00404591 752A                    jne 004045BD                         <-- Remember this for later
  45. :00404593 39BC2420010000          cmp dword ptr [esp+00000120], edi
  46. :0040459A 0F84BD000000            je 0040465D                          <-- And this too!
  47. :004045A0 6A10                    push 00000010
  48.  
  49. * Possible StringData Ref from Data Obj ->"No CDROM Drive Found!"
  50.                                   |
  51. :004045A2 68D0024900              push 004902D0
  52.  
  53. * Possible StringData Ref from Data Obj ->"Turok requires a CDROM Drive to " <-- String we searched
  54.                                         ->"run!"                             <-- for is right here
  55.                                   |
  56. :004045A7 68A8024900              push 004902A8
  57. :004045AC 53                      push ebx
  58.  
  59. * Reference To: USER32.MessageBoxA, Ord:0195h
  60.                                   |
  61. :004045AD FF1588157C00            Call dword ptr [007C1588]
  62. :004045B3 6A01                    push 00000001
  63. :004045B5 E866B70700              call 0047FD20
  64. :004045BA 83C404                  add esp, 00000004
  65.  
  66. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  67. |:00404591(C), :0040464A(C)
  68. |
  69. :004045BD 85ED                    test ebp, ebp
  70. :004045BF 0F858B000000            jne 00404650
  71. :004045C5 8B442414                mov eax, dword ptr [esp+14]
  72. :004045C9 33F6                    xor esi, esi
  73. :004045CB 85C0                    test eax, eax
  74. :004045CD 7E38                    jle 00404607
  75.  
  76. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  77. |:00404605(C)
  78. |
  79. :004045CF 85ED                    test ebp, ebp
  80. :004045D1 7534                    jne 00404607
  81. :004045D3 8A4C3418                mov cl, byte ptr [esp+esi+18]
  82. :004045D7 51                      push ecx
  83. :004045D8 53                      push ebx
  84. :004045D9 E8A2FEFFFF              call 00404480                     <-- WINMM calls to mciSendCommandA
  85. :004045DE 8BF8                    mov edi, eax
  86. :004045E0 83C408                  add esp, 00000008
  87. :004045E3 85FF                    test edi, edi
  88. :004045E5 7417                    je 004045FE
  89. :004045E7 E804FCFFFF              call 004041F0                     <-- More WINMM calls to mciSendCommandA
  90. :004045EC 85C0                    test eax, eax
  91. :004045EE 7407                    je 004045F7
  92. :004045F0 BD01000000              mov ebp, 00000001
  93. :004045F5 EB07                    jmp 004045FE
  94.  
  95. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  96. |:004045EE(C)
  97. |
  98. :004045F7 E874000000              call 00404670                     <-- More WINMM calls to mciSendCommandA
  99. :004045FC 33FF                    xor edi, edi
  100.  
  101. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  102. |:004045E5(C), :004045F5(U)
  103. |
  104. :004045FE 8B442414                mov eax, dword ptr [esp+14]
  105. :00404602 46                      inc esi
  106. :00404603 3BF0                    cmp esi, eax
  107. :00404605 7CC8                    jl 004045CF
  108.  
  109. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  110. |:004045CD(C), :004045D1(C)
  111. |
  112. :00404607 8BB42420010000          mov esi, dword ptr [esp+00000120]
  113. :0040460E 85F6                    test esi, esi
  114. :00404610 742A                    je 0040463C
  115. :00404612 85ED                    test ebp, ebp
  116. :00404614 7522                    jne 00404638
  117. :00404616 6A05                    push 00000005
  118.  
  119. * Possible StringData Ref from Data Obj ->"Turok CD Not Found!"
  120.                                   |
  121. :00404618 6894024900              push 00490294
  122.  
  123. * Possible StringData Ref from Data Obj ->"Unable to find Turok CD, Verify "         <-- More stuff
  124.                                         ->"CD is in drive and no other application " <-- about the CD
  125.                                         ->"is using CDROM Drive."
  126.                                   |
  127. :0040461D 6834024900              push 00490234
  128. :00404622 53                      push ebx
  129.  
  130. * Reference To: USER32.MessageBoxA, Ord:0195h
  131.                                   |
  132. :00404623 FF1588157C00            Call dword ptr [007C1588]
  133. :00404629 83F802                  cmp eax, 00000002                  <-- 00000002 means you hit cancel
  134. :0040462C 750A                    jne 00404638
  135. :0040462E 6A01                    push 00000001
  136. :00404630 E8EBB60700              call 0047FD20
  137. :00404635 83C404                  add esp, 00000004
  138.  
  139. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  140. |:00404614(C), :0040462C(C)
  141. |
  142. :00404638 85F6                    test esi, esi
  143. :0040463A 7508                    jne 00404644
  144.  
  145. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  146. |:00404610(C)
  147. |
  148. :0040463C C744241001000000        mov [esp+10], 00000001
  149.  
  150. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  151. |:0040463A(C)
  152. |
  153. :00404644 8B442410                mov eax, dword ptr [esp+10]
  154. :00404648 85C0                    test eax, eax
  155. :0040464A 0F846DFFFFFF            je 004045BD
  156.  
  157. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  158. |:004045BF(C)
  159. |
  160. :00404650 8BC7                    mov eax, edi
  161. :00404652 5F                      pop edi
  162. :00404653 5E                      pop esi
  163. :00404654 5D                      pop ebp
  164. :00404655 5B                      pop ebx
  165. :00404656 81C408010000            add esp, 00000108
  166. :0040465C C3                      ret
  167.  
  168. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  169. |:0040459A(C)
  170. |
  171. :0040465D 893DDC3B5100            mov dword ptr [00513BDC], edi
  172. :00404663 5F                      pop edi
  173. :00404664 5E                      pop esi
  174. :00404665 5D                      pop ebp
  175. :00404666 33C0                    xor eax, eax
  176. :00404668 5B                      pop ebx
  177. :00404669 81C408010000            add esp, 00000108
  178. :0040466F C3                      ret
  179.  
  180.     The CD check is actually through sets of calls to WINMM (WINdows Multi-Media DLL) and
  181. when they come back with error codes, the program knows there's no CD in the drive.  Also, as
  182. you can see there is two sections of code that cleans up and returns to the caller.  Remember
  183. those two lines at the beginning?  Well lets kill the first conditional jump and force the
  184. second jump to 0040465D and see what happens.  Well... you run the game and it starts right up!
  185. No more CD check to worry about, right?  Ok, so the edits to the file would be:
  186.  
  187. Edit turok.exe (offset 16,785)
  188. ========================================================
  189. Search for: 75 2A 39 BC 24 20 01 00 00 0F 84 BD 00 00 00
  190. Change to : 90 90 -- -- -- -- -- -- -- 90 E9 -- -- -- --
  191.  
  192.     Alright, the first two 90's replace the conditional jump with two NOP's and the second
  193. part of the edit changes the conditional jump (long) to a jump (long) but due to the size
  194. difference (conditional jump op-codes are two bytes and the unconditional op-code is one byte,
  195. plus both have a relative offset) you need to change one byte to NOP and the second to JMP,
  196. but the offset remains the same.  I hope you understand what I mean by that, an example of this
  197. edit would be:
  198.  
  199. :00404591 752A                    jne 004045BD <-- Do the CD check
  200. :00404593 39BC2420010000          cmp dword ptr [esp+00000120], edi
  201. :0040459A 0F84BD000000            je 0040465D  <-- Jump Equal {continue code}
  202.  -- Becomes --
  203. :00404591 90                      nop          <-- Do nothing except go to the next op-code
  204. :00404592 90                      nop          <-- Do nothing except go to the next op-code
  205. :00404593 39BC2420010000          cmp dword ptr [esp+00000120], edi
  206. :0040459A 90                      nop          <-- Do nothing except go to the next op-code
  207. :0040459B E9BD000000              jmp 0040465D <-- JuMP {continue code}
  208.  
  209.     Just one EXE file that uses different DLL's for the different 3D cards out there.
  210. Another CD check bytes (bites?) the dust... and another victory for the bad guys -or- the GOOD
  211. GUYS depending on your point of view!  Turok is now FiX'ed
  212.  
  213. Static Vengeance
  214.